﻿using famails.App_Code.source.dto;
using famails.bus;
using famails.dto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace famails.BackEnd.Customer
{
    public partial class ProductGroups : System.Web.UI.Page
    {
        CM_ProductGroupBUS Bus = new CM_ProductGroupBUS();
        log4net.ILog logs = log4net.LogManager.GetLogger("ErrorRollingLogFileAppender");
        static UserLoginDTO userLogin = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            userLogin = getUserLogin();
            if (!IsPostBack)
            {
                try
                {
                    LoadData();
                    hdfId.Value = null;
                }
                catch (Exception ex)
                {


                }
            }
        }
        public void xoatextbok()
        {
            txtname.Text = "";
        }
        private UserLoginDTO getUserLogin()
        {
            if (Session["us-login"] != null)
            {
                return (UserLoginDTO)Session["us-login"];
            }
            else Response.Redirect("~");
            return null;
        }
        private CM_ProductGroupDTO GetDTO()
        {

            CM_ProductGroupDTO sign = new CM_ProductGroupDTO();
            int temp = 0;
            if (int.TryParse(hdfId.Value + "", out temp))
                sign.ProductGroupID = temp;
            sign.ProductGroupName = txtname.Text;
            if (int.TryParse(ddlGroupStep.SelectedValue + "", out temp))
                sign.GroupStep = temp;
            if (int.TryParse(ddlParentGroup.SelectedValue + "", out temp))
                sign.ParentID = temp;
            else sign.ParentID = 0;
            sign.CreateBy = userLogin.UserId;
            return sign;
        }
        private string checkInput()
        {
            string masseng = "";

            if (txtname.Text == "")
            {
                masseng = "Vui lòng nhập tên nhóm chuyên mục";
            }
            else //if (hdfId.Value + "" != "")
            {
                CM_ProductGroupBUS bus = new CM_ProductGroupBUS();
                int temp = 0;
                int.TryParse(hdfId.Value + "", out temp);
                if (bus.CheckExistsName(txtname.Text, temp))
                    masseng = "Trùng tên nhóm chuyên mục";
            }
            return masseng;
        }
        private void LoadData()
        {
            try
            {
                dlProductGroup.DataSource = Bus.GetAll(userLogin.UserId);
                dlProductGroup.DataBind();
            }
            catch (Exception ex)
            {

                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = " Đã xảy ra lỗi trong quá trình thực hiện. Vui lòng thử lại !<br/>" + ex.Message;
                logs.Error(userLogin.Username + "-Customer-ProductGroup - LoadData", ex);
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                pnError.Visible = false;
                pnSuccess.Visible = false;
                string message = checkInput();
                int status = 0;
                if (message == "")
                {
                    CM_ProductGroupDTO dto = GetDTO();

                    if (hdfId.Value == null || hdfId.Value == "")
                    {
                        Bus.Insert(dto);
                        status = 1;
                    }
                    else
                    {
                        Bus.Edit(dto);
                        status = 2;
                        hdfId.Value = null;
                    }
                    pnSuccess.Visible = true;
                    LoadData();
                    if (status == 1)
                    {
                        lblSuccess.Text = "Bạn vừa thêm thành công nhóm chuyên mục !";
                    }
                    else
                        if (status == 2)
                        {
                            lblSuccess.Text = "Bạn vừa cập nhật thành công nhóm chuyên mục !";
                        }
                }
                else
                {

                    pnSuccess.Visible = false;
                    pnError.Visible = true;
                    lblError.Text = message;

                }

            }
            catch (Exception ex)
            {

                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = " Đã xảy ra lỗi trong quá trình thực hiện. Vui lòng thử lại !<br/>" + ex.Message;
                logs.Error(userLogin.Username + "-Customer-ProductGroup - Update", ex);
            }
            LoadData();
            xoatextbok();

        }
        protected void btnDelete_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton)sender).CommandArgument.ToString());
            if (id < 0)
            {
                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = "Không thể xóa nhóm chuyên mục này vì đây là nhóm khách hàng mặt định của hệ thống";
                return;
            }
            bool isdelete = Bus.CheckBeforeDelete(id);
            if (!isdelete)
            {
                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = "Không thể xóa nhóm chuyên mục này vì được sử dụng chia nhóm khách hàng";
                return;
            }
            try
            {

                if (Bus.Delete(id))
                {
                    LoadData();
                    pnError.Visible = false;
                    pnSuccess.Visible = true;
                    lblSuccess.Text = "Xóa thành công";
                }
            }
            catch (Exception ex)
            {
                pnError.Visible = true;
                lblError.Text = "Không thể xóa !</br>" + ex.Message;
                logs.Error(userLogin.Username + "-Customer-ProductGroup-Delete-", ex);
            }

        }
        protected void btnEdit_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                int id = int.Parse((((ImageButton)sender).CommandArgument.ToString()));
                if (id < 0)
                {
                    pnSuccess.Visible = false;
                    pnError.Visible = true;
                    lblError.Text = "Không thể chỉnh sửa nhóm chuyên mục này vì đây là nhóm khách hàng mặt định của hệ thống";
                    return;
                }

                DataTable table = Bus.GetByID(id, userLogin.UserId);
                if (table.Rows.Count > 0)
                {
                    txtname.Text = table.Rows[0]["ProductGroupname"].ToString();
                    ddlGroupStep.SelectedValue = table.Rows[0]["GroupStep"] + "";
                    if (ddlGroupStep.SelectedValue != "1")
                        ddlParentGroup.SelectedValue = table.Rows[0]["ParentID"] + "";
                    this.hdfId.Value = id + "";
                    if (id < 0) txtname.Enabled = false;
                    else txtname.Enabled = true;
                    ddlGroupStep_SelectedIndexChanged(sender, e);
                }
            }
            catch (Exception ex)
            {
                pnError.Visible = false;
                pnSuccess.Visible = false;
                logs.Error(userLogin.Username + "-Customer-ProductGroup - Edit", ex);
            }
        }

        protected void ddlGroupStep_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataTable source = Bus.GetParentGroup(ddlGroupStep.SelectedValue, userLogin.UserId);
            ddlParentGroup.Items.Clear();
            ddlParentGroup.DataValueField = "ProductGroupID";
            ddlParentGroup.DataTextField = "ProductGroupName";
            ddlParentGroup.DataSource = source;
            ddlParentGroup.DataBind();
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static List<CM_ProductGroupDTO> LoadTree()
        {
            List<CM_ProductGroupDTO> result = new List<CM_ProductGroupDTO>();

            CM_ProductGroupBUS bus = new CM_ProductGroupBUS();
            DataTable source = bus.GetProductGroup(userLogin.UserId, 1);
            foreach (DataRow row in source.Rows)
            {
                CM_ProductGroupDTO dto = new CM_ProductGroupDTO();
                dto.ProductGroupName = row["ProductGroupName"] + "";
                dto.ProductGroupID = Convert.ToInt32(row["ProductGroupID"]);
                dto.CreateDate = Convert.ToDateTime(row["CreateDate"]);
                dto.children = GetChildGroup(dto.ProductGroupID, Convert.ToInt32(row["GroupStep"]) + 1);
                result.Add(dto);
            }

            return result;
        }
        static List<CM_ProductGroupDTO> GetChildGroup(int parentid, int groupstep)
        {
            CM_ProductGroupBUS bus = new CM_ProductGroupBUS();
            List<CM_ProductGroupDTO> result = new List<CM_ProductGroupDTO>();
            DataTable source = bus.GetChildGroup(parentid, groupstep, userLogin.UserId);
            foreach (DataRow row in source.Rows)
            {
                CM_ProductGroupDTO dto = new CM_ProductGroupDTO();
                dto.ProductGroupName = row["ProductGroupName"] + "";
                dto.ProductGroupID = Convert.ToInt32(row["ProductGroupID"]);
                dto.children = GetChildGroup(dto.ProductGroupID, Convert.ToInt32(row["GroupStep"]) + 1);
                result.Add(dto);
            }
            return result;
        }
    }
}